﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.Generic;
using Biciq.Datos;
using System.Linq;
using System.ComponentModel;

namespace Biciq.Silverlight.UI
{
    public class DistanciasVistaModelo:VistaModeloBase
    {
        #region Constructores
        public DistanciasVistaModelo()
        {
            InicializarMensajesError();
            CargarEstaciones();
        }
        #endregion
        #region Campos
        private List<Estacion> _listaEstaciones;

        private Estacion _estacionSeleccionada;

        private Distancia _distanciaSeleccionada;

       


        #endregion
        #region Propiedades
        /// <summary>
        /// Metodo para la seleccion de las distancias.
        /// </summary>
        public Distancia DistanciaSeleccionada
        {
            get { return _distanciaSeleccionada; }
            set 
            {
                _distanciaSeleccionada = value;
                RaisePropertyChanged("DistanciaSeleccionada");
            }
        }
        /// <summary>
        /// Selección de la estacion de origen.
        /// </summary>
        public Estacion EstacionSeleccionada
        {
            get { return _estacionSeleccionada; }
            set
            { 
                _estacionSeleccionada = value;
                RaisePropertyChanged("EstacionSeleccionada");
            }
        }
        /// <summary>
        /// Lista de estaciónes.
        /// </summary>
        public List<Estacion> ListaEstaciones
        {
            get { return _listaEstaciones; }
            set
            {
                _listaEstaciones = value;
                RaisePropertyChanged("ListaEstaciones");

            }
        }
        #endregion
        #region Métodos Privados
        /// <summary>
        /// Metodo que mustra las estación.
        /// </summary>
        private void CargarEstaciones()
        {
            Procesando = true;
            BiciqContexto.Estacions.Clear();
            BiciqContexto.Load(BiciqContexto.GetEstacionDistanciaQuery()).Completed += delegate
            {
                ListaEstaciones = BiciqContexto.Estacions.ToList();
               
                Procesando = false;
            };
        }

      
        #endregion
        #region Métodos Públicos
        /// <summary>
        /// Sentencia que permite guardar la edición.
        /// </summary>
        public override void Guardar()
        {
            Procesando = true;
            BiciqContexto.SubmitChanges().Completed+=delegate
            {
                Procesando = false;
                LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar("Las distancias se han guardado exitosamente", "Registro Exitoso", LogicStudio.Framework.UI.Utilidades.TipoVentana.Ok);
            };
        }
        public override void CancelarCambios()
        {
            Cancelar(BiciqContexto);
            CargarEstaciones();
        }
        #endregion
    }
}
